//给你一个整数 n ，请你找出并返回第 n 个 丑数 。 
//
// 丑数 就是只包含质因数 2、3 和/或 5 的正整数。 
//
// 
//
// 示例 1： 
//
// 
//输入：n = 10
//输出：12
//解释：[1, 2, 3, 4, 5, 6, 8, 9, 10, 12] 是由前 10 个丑数组成的序列。
// 
//
// 示例 2： 
//
// 
//输入：n = 1
//输出：1
//解释：1 通常被视为丑数。
// 
//
// 
//
// 提示： 
//
// 
// 1 <= n <= 1690 
// 
// Related Topics 哈希表 数学 动态规划 堆（优先队列） 👍 920 👎 0


//leetcode submit region begin(Prohibit modification and deletion)
class Solution264 {
    public int nthUglyNumber(int n) {
        if (n == 1) return 1;
        int[] dp = new int[n + 1];
        dp[1] = 1;
        int index2 = 1;
        int index3 = 1;
        int index5 = 1;
        for (int i = 2; i < dp.length; i++) {
            int num2 = dp[index2] * 2;
            int num3 = dp[index3] * 3;
            int num5 = dp[index5] * 5;
            int temp = Math.min(num2, num3);
            dp[i] = Math.min(temp, num5);
            if (dp[i] == num2) {
                index2++;
            }
            if (dp[i] == num3) {
                index3++;
            }
            if (dp[i] == num5) {
                index5++;
            }
        }
        return dp[n];
    }
}
//leetcode submit region end(Prohibit modification and deletion)
